package com.atguigu.jxc.controller;

import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.xml.ws.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("goods")
public class GoodsController {


    @Autowired
    GoodsService goodsService;

    //查询当前库存（可根据商品类别、商品编码或名称搜索）
    /**
     * 请求URL：http://localhost:8080/goods/listInventory
     * 请求参数：Integer page, Integer rows, String codeOrName, Integer goodsTypeId
     * 请求方式：POST
     * 返回值类型： JSON
     * 返回值：Map<String,Object>
     */
    @PostMapping("/listInventory")
    public Map<String,Object> listInventory(Integer page, Integer rows, String codeOrName, Integer goodsTypeId){
        List<Goods> list = goodsService.listInventory(page, rows, codeOrName, goodsTypeId);
           HashMap hashMap=new HashMap();
           hashMap.put("total",list.size());
            hashMap.put("rows",list);
            return hashMap;

    }



    //、查询所有商品信息（可      家具家电及诶诶你们的额死你们以根据分类、名称查询）
    /**
     * 请求URL：http://localhost:8080/goods/list
     * 请求参数：Integer page, Integer rows, String goodsName, Integer goodsTypeId
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：Map<String,Object>
     */
    @PostMapping("list")
    public  Map<String,Object> list(Integer page, Integer rows, String goodsName, Integer goodsTypeId){
        Map<String, Object> map = this.listInventory(page, rows, goodsName, goodsTypeId);
           return  map;
    }



    //商品添加或修改
/**
 * 请求URL：http://localhost:8080/goods/save?goodsId=37
 * 请求参数：Goods goods
 * 请求方式：POST
 * 返回值类型：JSON
 * 返回值：ServiceVO
 */

@PostMapping("save")
public ServiceVO save(Integer goodsId,Goods goods){
    if (goodsId==null){
        //是添加
          goodsService.save(goods);
          return  new ServiceVO(100,"请求成功",null);
    }else{
        goods.setGoodsId(goodsId);
          //是修改
        goodsService.update(goods);
        return  new ServiceVO(100,"请求成功",null);
    }

}


//商品删除（要判断商品状态,入库、有进货和销售单据的不能删除）
/**
 * 请求URL：http://localhost:8080/goods/delete
 * 请求参数：Integer goodsId
 * 请求方式：POST
 * 返回值类型：JSON
 * 返回值：ServiceVO
 */

@PostMapping("delete")
public ServiceVO delete(Integer goodsId){
    String delete = goodsService.delete(goodsId);
    if (delete==null){
        return  new ServiceVO(100,"请求成功",null);
    }
   return  new ServiceVO(100,"请求成功",delete);
}


//无库存商品列表展示（可以根据商品名称或编码查询）
/**
 * 请求URL：http://localhost:8080/goods/getNoInventoryQuantity
 * 请求参数：Integer page,Integer rows,String nameOrCode
 * 请求方式：POST
 * 返回值类型：JSON
 * 返回值：Map<String,Object>
 */
@PostMapping("getNoInventoryQuantity")
public   Map<String,Object> getNoInventoryQuantity(Integer page,Integer rows,String nameOrCode){
         List<Goods> lisi=  goodsService.getNoInventoryQuantity(page,rows,nameOrCode);
         HashMap map=new HashMap();
                 map.put("total",lisi.size());
                  map.put("rows",lisi);
                  return map;
}


//有库存商品列表展示（可以根据商品名称或编码查询）
/**
 * 请求URL：http://localhost:8080/goods/getHasInventoryQuantity
 * 请求参数：Integer page,Integer rows,String nameOrCode
 * 请求方式：POST
 * 返回值类型：JSON
 * 返回值：Map<String,Object>
 */

@PostMapping("getHasInventoryQuantity")
public  Map<String,Object> getHasInventoryQuantity(Integer page,Integer rows,String nameOrCode){
       List<Goods> list= goodsService.getHasInventoryQuantity(page,rows,nameOrCode);
       HashMap hashMap=new HashMap();
       hashMap.put("total",list.size());
       hashMap.put("rows",list);
       return hashMap;

}


//添加库存、修改数量或成本价
/**
 * 请求URL：http://localhost:8080/goods/saveStock?goodsId=25
 * 请求参数：Integer goodsId,Integer inventoryQuantity,double purchasingPrice
 * 请求方式：POST
 * 返回值类型：JSON
 * 返回值：ServiceVO
 */

@PostMapping("saveStock")
public  ServiceVO  saveStock(Integer goodsId,Integer inventoryQuantity,double purchasingPrice){
           goodsService.saveStock(goodsId,inventoryQuantity,purchasingPrice);
    return  new ServiceVO(100,"请求成功",null);
}


//删除库存（要判断商品状态 入库、有进货和销售单据的不能删除）
    /**
     * 请求URL：http://localhost:8080/goods/deleteStock
     * 请求参数：Integer goodsId
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：ServiceVO
     */
    @PostMapping("deleteStock")
    public  ServiceVO deleteStock(Integer goodsId){
        String delete = goodsService.delete(goodsId);
        if (delete==null){
            return  new ServiceVO(100,"请求成功",null);
        }
        return  new ServiceVO(100,delete,delete);
    }


    //   库存报警  查询所有 当前库存量 小于 库存下限的商品信息
    /**
     * 请求URL：http://localhost:8080/goods/listAlarm
     * 请求参数：无
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：Map<String,Object>
     */
    @PostMapping("listAlarm")
      public Map<String,Object> listAlarm(){
            List<Goods> list=  goodsService.listAlarm();
              HashMap hashMap=new HashMap();
              hashMap.put("rows",list);
              return  hashMap;


      }

























}
